import { decode, encode } from '@xobj/core';

/**
 * Blob JSON 转换器
 * 用于在数据库 BLOB 类型和 JavaScript 对象之间进行转换
 */
export const blobJSONTransformer = {
  /**
   * 将 JavaScript 对象转换为 Buffer 用于存储
   * @param value - 要转换的 JavaScript 对象
   * @returns Buffer 或 undefined（当输入为空时）
   */
  to: (value) => (value ? Buffer.from(encode(value)) : undefined),

  /**
   * 将数据库中的 Buffer 转换回 JavaScript 对象
   * @param value - 从数据库读取的 Buffer 数据
   * @returns 解码后的 JavaScript 对象，如果输入为空则返回 null
   */
  from: (value: Buffer) => {
    if (value?.length) return decode(new Uint8Array(value).buffer);
    return null;
  },
};
